package com.sensePlusVR.realGame;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class Action {
	private int mainIndex;
	private int fov;
	private String  name;
	private List<String> videoFiles;
	private List<SubAction> subActions;
	private int currentMinor;
	public Action(JsonObject json, String dir){
		mainIndex = json.get("main").getAsInt();
		fov = json.get("fov").getAsInt();
		name = json.get("name").getAsString();
		
		videoFiles = new ArrayList<String>();
		JsonArray video = json.get("video").getAsJsonArray();
		for (int i = 0; i < video.size(); i++){
			videoFiles.add(dir + video.get(i).getAsString());
		}
		
		subActions = new ArrayList<SubAction>();
		JsonArray subs = json.get("subaction").getAsJsonArray();
		for (int i = 0; i < subs.size(); i++){
			JsonElement el = subs.get(i);
			if (el == null || !el.isJsonObject()){
				continue;
			}
			JsonObject subact = el.getAsJsonObject();
			if (subact == null || !subact.isJsonObject()){
				continue;
			}
			subActions.add(new SubAction(subact, dir));
		}
		
		currentMinor = 0;
	}
	
	public int fov(){
		return fov;
	}
	
	public int mainIndex(){
		return mainIndex;
	}
	
	public String name(){
		return name;
	}
	
	public void ChangeMinor(){
		currentMinor = (currentMinor+1)%subActions.size();
	}
	
	public void setMinor(int minor){
		currentMinor = minor%subActions.size();
	}
	
	public String getIdleAudio(){
		if (subActions.size() == 0)
			return null;
		String audio = subActions.get(currentMinor).getIdleAudio();
		if (audio != null)
			return audio;
		return subActions.get(0).getIdleAudio();
	}
	
	public String getLowAudio(){
		if (subActions.size() == 0)
			return null;
		String audio = subActions.get(currentMinor).getLowAudio();
		if (audio != null)
			return audio;
		return subActions.get(0).getLowAudio();
	}
	
	public String getMidAudio(){
		if (subActions.size() == 0)
			return null;
		String audio = subActions.get(currentMinor).getMidAudio();
		if (audio != null)
			return audio;
		return subActions.get(0).getMidAudio();
	}
	
	public String getFastAudio(){
		if (subActions.size() == 0)
			return null;
		String audio = subActions.get(currentMinor).getFastAudio();
		if (audio != null)
			return audio;
		return subActions.get(0).getFastAudio();
	}
	
	public String video(){
		if (videoFiles.size() == 0)
			return null;
		return videoFiles.get(0);
	}
	
	public String toString(){
		String actionString = null;
		for (int i = 0; i < subActions.size(); i++){
			SubAction sub = subActions.get(i);
			if (i == 0) {
				actionString = String.format("%s,%d,", name, mainIndex) + sub.toString();
			}else{
				actionString = actionString + ";" + String.format("%s,%d,", name, mainIndex) + sub.toString();
			}
		}

		return actionString;
	}
}
